package com.li.onjava8.concurrent.under.share;

import com.li.onjava8.concurrent.utils.Nap;

/**
 * 为了解决线程冲突的问题，基本的并发方案将序列化访问共享资源。这意味着一次只允许一个任务访问
 * 共享资源。
 * 通常你会将字段设为 private，并仅通过方法访问这些字段。你可用通过使用 synchronized 关键字声明
 * 方法来防止资源冲突。'
 */
public class SynchronizedEvenProducer extends IntGenerator {
    private int currentEvent = 0;
    @Override
    public synchronized int next() {
        ++currentEvent;
        new Nap(0.01); // 增加出错几率
        ++currentEvent;
        return currentEvent;
    }

    public static void main(String[] args) {
        EvenChecker.test(new SynchronizedEvenProducer());
    }
}
